//
//  MCCardEvent.h
//  ApexIOTCardSDK
//
//  Created by 黄亮东 on 16/9/24.
//  Copyright © 2016年 珠海艾派克科技股份有限公司. All rights reserved.
//
/**
 * 上层应用主要将通过本事件对象获得底层SDK驱动实现或生成的卡片（Card）对象；
 * 在读卡设备上，贴上或者移开一张卡片，将会触发卡片相应的事件，底层将通过该事件对象传递卡片实例对象；
 *
 * 贴上一张卡片，将会生成并触发类型为TYPTE_ATTACHED事件；
 * 并且，如果系统当前锁定操作的卡片为空，则该卡片将会生成并触发类型为TYPTE_CHANGED事件；
 * 或者，如果该卡片与系如果该卡片与系统当前锁定操作中的卡片不是同一个对象，将会生成并触发TYPE_NOT_APPLICABLE事件；
 *
 * 换句话说，系统已经锁定某张卡片，如果重复贴上相同的该卡片，将不会再触发TYPE_CHANGED事件，但每次贴紧都会触发TYPTE_ATTACHED事件。
 * 换句话说，系统已经锁定某张卡片，如果贴上不同的卡片，将会触发TYPE_NOT_APPLICABLE事件，并且每次贴紧都会触发TYPTE_ATTACHED事件。
 *
 * 某张卡片一旦曾经触发TYPTE_ATTACHED事件，也就是贴近过；那么当该卡片离开感应区，或者卡片发生错误，不再被感应区有效识别或读取，将会触发TYPE_UNATTACHED事件。
 * 某张卡片如果长时间离开感应区，超过系统设置的时间例如60S，那么将触发TYPE_TIMEOUT事件（此事件为可选择性实现的功能，底层有可能不支持）。
 *
 * @since 1.0
 * @version 1.0
 * @author ys
 *
 */
#import <Foundation/Foundation.h>
#import "MCCard.h"
typedef NS_ENUM(NSInteger, MCCardEventType){
    MCCardEventType_CHANGED = 1,
    MCCardEventType_NOT_APPLICABLE = 2,
    MCCardEventType_ATTACHED = 3,
    MCCardEventType_UNATTACHED = 4,
    MCCardEventType_EXCEPTION = 5,
};
@interface MCCardEvent : NSObject

+ (instancetype)sharedInstance;
/**
 * 卡片事务类型
 */
@property (nonatomic, assign) MCCardEventType eventType;
/**
 * 贴近的卡片
 */
@property (nonatomic, strong) MCCard *attachedCard;
/**
 * 新的读取的卡片
 */
@property (nonatomic, strong) MCCard *NewCard;
/**
 * 上一次的卡片
 */
@property (nonatomic, strong) MCCard *oldCard;
/**
 * 错误信息
 */
@property (nonatomic, copy) NSString *errorMessage;
/**
 * 卡片中文件的总大小
 */
@property (nonatomic, assign) NSInteger targetAmount;
/**
 * 当前已经读取的文件总大小
 */
@property (nonatomic, assign) NSInteger currentAmount;

/**
 * 当前已经读取的总进度
 */
@property (nonatomic, assign) float rateOfProgress;

@end
